package com.zhentao.datacontrol.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhentao.datacontrol.domain.dto.DataControlRuleDTO;
import com.zhentao.datacontrol.domain.entity.DataControlRule;

import java.util.List;

public interface DataControlRuleService extends IService<DataControlRule> {

    /**
     * 分页查询规则列表
     */
    IPage<DataControlRuleDTO> getRulePage(int pageNo, int pageSize, Long groupId, 
                                        String ruleName, String status, String publishStatus);

    /**
     * 获取规则详情
     */
    DataControlRuleDTO getRuleDetail(Long id);

    /**
     * 创建规则
     */
    Long createRule(DataControlRuleDTO ruleDTO);

    /**
     * 更新规则
     */
    boolean updateRule(DataControlRuleDTO ruleDTO);

    /**
     * 删除规则
     */
    boolean deleteRule(Long id);

    /**
     * 发布规则
     */
    boolean publishRule(Long id);

    /**
     * 取消发布规则
     */
    boolean unpublishRule(Long id);

    /**
     * 启用规则
     */
    boolean enableRule(Long id);

    /**
     * 禁用规则
     */
    boolean disableRule(Long id);

    /**
     * 移动规则到指定分组
     */
    boolean moveRuleToGroup(Long ruleId, Long groupId);

    /**
     * 获取分组下的规则列表
     */
    List<DataControlRuleDTO> getRulesByGroup(Long groupId);

    /**
     * 获取规则树形结构
     */
    List<DataControlRuleDTO> getRuleTree();

    /**
     * 检查规则编码是否存在
     */
    boolean checkRuleCodeExists(String ruleCode, Long excludeId);

    /**
     * 生成下一个规则编码
     */
    String generateNextRuleCode();

    /**
     * 批量更新排序
     */
    boolean updateSortOrders(List<Long> ids, List<Integer> sortOrders);

    /**
     * 获取已发布的规则列表（用于执行检控）
     */
    List<DataControlRuleDTO> getPublishedRules();

    /**
     * 复制规则
     */
    Long copyRule(Long sourceId, String newRuleName);
}
